home *** CD-ROM | disk | FTP | other *** search
/ Quick PC 61 / Quick PC 61.iso / I386 / WMS.CAB / MulticastSink.asp < prev    next >
Encoding:
Text File  |  2003-02-21  |  42.8 KB  |  1,110 lines

  1. <%@ Language=VBScript CODEPAGE=65001 %>
  2. <!--#include file="include/wmsLocStrings.inc"-->
  3. <!--#include file="include/wmsServerHash.inc"-->
  4. <!--#include file="include/wmsPlugins.inc"-->
  5. <!--#include file="include/wmsHeader.inc"-->
  6. <!--#include file="include/wmsPageBanner.inc"-->
  7. <!--#include file="include/wmsError.inc"-->
  8. <!--#include file="plugin_loading.inc"-->
  9. <%
  10. '+-------------------------------------------------------------------------
  11. '
  12. '  Microsoft Windows Media
  13. '  Copyright (C) Microsoft Corporation. All rights reserved.
  14. '
  15. '  File:       MulticastSink.asp
  16. '
  17. '  Contents:
  18. '
  19. '--------------------------------------------------------------------------
  20.  
  21. BeginErrorHandling
  22. ConnectToPlugin
  23. ConnectToPluginAdmin
  24.  
  25. on error resume next
  26.  
  27. Dim dwBCastFlags
  28. dwBCastFlags = g_objPubPoint.BroadcastStatus
  29.  
  30. Dim bPubPointRunningPluginEnabled
  31.  
  32. bPubPointRunningPluginEnabled = ( ( WMS_BROADCAST_PUBLISHING_POINT_STARTED_WITHOUT_DATA = dwBCastFlags ) or _
  33.                                   ( WMS_BROADCAST_PUBLISHING_POINT_STARTED = dwBCastFlags ) ) and _
  34.                                   ( WMS_PLUGIN_ENABLED and g_objPlugin.Status )
  35.  
  36. Dim strNewIPAddr
  37. Dim dwIPPort
  38. Dim lTTLOption
  39. Dim lTTLValue
  40.  
  41. Dim bEnableUnicastRollover
  42. Dim bLocalPPRollover
  43. Dim strUnicastRolloverPP
  44.  
  45. Dim strIPAddr
  46. Dim strLoggingURL
  47.  
  48. lTTLOption = 0
  49. lTTLValue = 0
  50.  
  51. '///////////////////////
  52.  
  53. Dim rgMcastScopes()
  54. Dim dwNumScopes
  55. Dim bError
  56.  
  57. Dim dwProductType
  58. Dim bRunningOnWhistlerAdvServer
  59.  
  60. '
  61. '  Quick sanity check-- we must be running Advanced Server or the plug-in won't be available
  62. '
  63. dwProductType = g_objServer.OSProductType
  64. if( 0 <> err.number ) then
  65.     bRunningOnWhistlerAdvServer = FALSE
  66.     err.Clear
  67. else
  68.     bRunningOnWhistlerAdvServer = CBool( WMS_OS_PRODUCT_ADVANCED and dwProductType )
  69. end if
  70.  
  71. ' Fill these in using the form in case we have to show an error page-- we want the user's values filled in
  72. strIPAddr = g_objPluginAdmin.DestinationMulticastIPAddress
  73. strNewIPAddr = RemoveDangerousCharacters( Left( GetFormStr( "IPAddress" ), 15 ) )
  74.  
  75. dwIPPort = GetFormDbl( "port" )
  76.  
  77. Dim szTmpTTL
  78. szTmpTTL = GetFormStr( "TTL" )
  79. if( 0 < Len( szTmpTTL ) ) then
  80.     lTTLOption = szTmpTTL
  81. else
  82.     lTTLOption = 0
  83. end if
  84.  
  85. lTTLValue = GetFormDbl( "customTTL" )
  86.  
  87. bEnableUnicastRollover = 0 < Len( GetFormStr( "enableUnicastRollover" ) )
  88. bLocalPPRollover = CBool( "localPP" = GetFormStr( "RolloverToLocalPP" ) )
  89. strUnicastRolloverPP = RemoveDangerousCharacters( Left( GetFormStr( "otherPPURL" ), MAX_PATH ) )
  90. strLoggingURL = RemoveDangerousCharacters( Left( GetFormStr( "loggingURL" ), MAX_PATH ) )
  91.  
  92. Const SCOPEIP = 0
  93. Const SCOPEDESC = 1
  94.  
  95. Const WMS_UNICAST_ROLLOVER_URL_OPTIONS_NONE = 0
  96. Const WMS_UNICAST_ROLLOVER_URL_OPTIONS_DEFAULT = 1
  97. Const WMS_UNICAST_ROLLOVER_URL_OPTIONS_CUSTOM = 2
  98.  
  99. dwNumScopes = 0
  100. bError = FALSE
  101.  
  102. '///////////////////////////////////////////////////////////////
  103.  
  104. Err.Clear
  105. on error resume next
  106.  
  107. Dim strOp
  108. strOp = GetFormStr( "submit" )
  109. if( 0 < Len( strOp ) ) then
  110.  
  111.     ' use a do-while-false structure to break out upon first error    
  112.     do
  113.         Session( "PageReloadedToDisplayError" ) = 0
  114.  
  115.         err.Clear
  116.         if( ( 0 < Len( strNewIPAddr ) ) and ( 0 <> strcomp( strIPAddr, strNewIPAddr, vbTextCompare ) ) ) then
  117.             g_objPluginAdmin.DestinationMulticastIPAddress = CStr( strNewIPAddr )
  118.             if( ErrorDetected( "IPAddr" ) ) then
  119.                 bError = TRUE
  120.                 exit do
  121.             end if
  122.         end if
  123.  
  124.         if( 0 >= dwIPPort ) then
  125.             err.raise( -1 )
  126.             err.description = RemoveDangerousCharacters( L_SPECIFYPORT_TEXT )
  127.             ErrorDetected( "IPPort" )
  128.             bError = TRUE
  129.             exit do
  130.         else
  131.             if( dwIPPort <> g_objPluginAdmin.DestinationMulticastPort ) then
  132.                 if( ( 0 >= dwIPPort ) or ( 65536 <= dwIPPort ) )then
  133.                     Raise( -1 )
  134.                     Err.Description = RemoveDangerousCharacters( L_INVALIDPORTENTRY_TEXT )
  135.                 else
  136.                     err.Clear
  137.                     g_objPluginAdmin.DestinationMulticastPort = dwIPPort
  138.                 end if
  139.                 if( ErrorDetected( "IPPort" ) ) then
  140.                     bError = TRUE
  141.                     exit do
  142.                 end if
  143.             end if
  144.         end if
  145.  
  146.         if( 0 <> lTTLOption ) then
  147.             lTTLValue = lTTLOption
  148.         end if
  149.  
  150.         if( ( 0 >= lTTLValue ) or ( 255 < lTTLValue ) ) then
  151.             err.Raise( -1 )
  152.             if( 0 <> lTTLValue ) then
  153.                 err.description = RemoveDangerousCharacters( L_SPECIFYTTL_TEXT )
  154.                 ErrorDetected( "customTTL" )
  155.                 bError = TRUE
  156.                 exit do
  157.             else
  158.                 err.description = RemoveDangerousCharacters( L_SPECIFYTTL_TEXT )
  159.                 ErrorDetected( "autoTTL" )
  160.                 bError = TRUE
  161.                 exit do
  162.             end if
  163.         else
  164.             if( CDbl( lTTLValue ) <> g_objPluginAdmin.MulticastTtl ) then
  165.                 g_objPluginAdmin.MulticastTtl = lTTLValue
  166.                 if ErrorDetected( "customTTL" ) then
  167.                     err.description = RemoveDangerousCharacters( L_SPECIFYTTL_TEXT )
  168.                     Session( "ErrorDescription" ) = err.Description
  169.                     bError = TRUE
  170.                     exit do
  171.                 end if
  172.             end if
  173.         end if
  174.  
  175.         Dim dwRollOpts
  176.         dwRollOpts = g_objPluginAdmin.UnicastRolloverURLOptions
  177.  
  178.         if( FALSE = bEnableUnicastRollover ) then
  179.             if( WMS_UNICAST_ROLLOVER_URL_OPTIONS_NONE <> dwRollOpts ) then
  180.                 g_objPluginAdmin.UnicastRolloverURLOptions = WMS_UNICAST_ROLLOVER_URL_OPTIONS_NONE
  181.                 dwRollOpts = WMS_UNICAST_ROLLOVER_URL_OPTIONS_NONE
  182.             end if
  183.         elseif( bLocalPPRollover )then
  184.             if( WMS_UNICAST_ROLLOVER_URL_OPTIONS_DEFAULT <> dwRollOpts ) then
  185.                 g_objPluginAdmin.UnicastRolloverURLOptions = WMS_UNICAST_ROLLOVER_URL_OPTIONS_DEFAULT
  186.                 dwRollOpts = WMS_UNICAST_ROLLOVER_URL_OPTIONS_DEFAULT
  187.                 if ErrorDetected( "localPP" ) then
  188.                     bError = TRUE
  189.                     exit do
  190.                 end if
  191.             end if
  192.         elseif( WMS_UNICAST_ROLLOVER_URL_OPTIONS_CUSTOM <> dwRollOpts ) then
  193.             g_objPluginAdmin.UnicastRolloverURLOptions = WMS_UNICAST_ROLLOVER_URL_OPTIONS_CUSTOM
  194.             dwRollOpts = WMS_UNICAST_ROLLOVER_URL_OPTIONS_CUSTOM
  195.             g_objPluginAdmin.UnicastRolloverURL = strUnicastRolloverPP
  196.             if ErrorDetected( "otherPP" ) then
  197.                 bError = TRUE
  198.                 exit do
  199.             end if
  200.         end if
  201.  
  202.         if( WMS_UNICAST_ROLLOVER_URL_OPTIONS_CUSTOM = g_objPluginAdmin.UnicastRolloverURLOptions ) then
  203.             if( 0 <> StrComp( g_objPluginAdmin.UnicastRolloverURL, strUnicastRolloverPP, vbTextCompare ) ) then
  204.                 g_objPluginAdmin.UnicastRolloverURL = strUnicastRolloverPP
  205.                 if ErrorDetected( "otherPP" ) then
  206.                     bError = TRUE
  207.                     exit do
  208.                 end if                
  209.                 
  210.                 if( 0 <> StrComp( g_objPluginAdmin.UnicastRolloverURL, strUnicastRolloverPP, vbTextCompare ) ) then
  211.                     err.Raise -2, "multicastsink.asp", "plugin admin failed to accept change", 0, 0
  212.                     if ErrorDetected( "otherPP" ) then
  213.                         bError = TRUE
  214.                         exit do
  215.                     end if                
  216.                 end if
  217.             end if
  218.         end if
  219.  
  220.         strWhichNIC = GetFormStr( "NICIP" )
  221.         if( 0 < Len( strWhichNIC ) ) then
  222.             if( 0 = CInt( strWhichNIC ) ) then
  223.                 g_objPluginAdmin.LocalIPAddress = ""
  224.             else
  225.                 strWhichAddr = CStr( g_objServer.AvailableIPAddresses( CInt( strWhichNIC ) - 1 ) )
  226.                 if( 0 <> strComp( CStr( g_objPluginAdmin.LocalIPAddress ), strWhichAddr, vbTextCompare ) ) then
  227.                     g_objPluginAdmin.LocalIPAddress = strWhichAddr
  228.                 end if
  229.             end if
  230.         end if
  231.  
  232.         if( 0 <> strcomp( CStr( strLoggingURL ), g_objPluginAdmin.LoggingURL, vbTextCompare ) ) then
  233.             g_objPluginAdmin.LoggingURL = CStr( strLoggingURL )
  234.             if ErrorDetected( "loggingURL" ) then
  235.                 bError = TRUE
  236.                 exit do
  237.             end if
  238.         end if
  239.  
  240.     Loop Until TRUE
  241.  
  242.     Err.Clear
  243.     
  244.     if( bError ) then
  245.         Session( "PageReloadedToDisplayError" ) = 1
  246.     else
  247.         Response.Redirect "../pubpoints/pubpoint_props.asp?server=" & g_strQueryStringServer & "&ppID=" & g_strPubPointID & "&category=" & g_strCategory & "&pluginIndex=" & qs( "pluginIndex" )
  248.     end if
  249.  
  250. else    ' op wasn't OK
  251.     
  252.     if( 1 <> Session( "PageReloadedToDisplayError" ) ) then
  253.     
  254.         dwIPPort = g_objPluginAdmin.DestinationMulticastPort
  255.         lTTLValue = g_objPluginAdmin.MulticastTtl
  256.  
  257.         Select Case( lTTLValue )
  258.             case 1
  259.                 lTTLOption = 1
  260.             case 32
  261.                 lTTLOption = 32
  262.             case 64
  263.                 lTTLOption = 64
  264.             case 128
  265.                 lTTLOption = 128
  266.             case 255
  267.                 lTTLOption = 255
  268.             case else
  269.                 lTTLOption = 0
  270.         End Select
  271.         
  272.         Dim dwRolloverOpts
  273.         dwRolloverOpts = g_objPluginAdmin.UnicastRolloverURLOptions
  274.         if( WMS_UNICAST_ROLLOVER_URL_OPTIONS_NONE = dwRolloverOpts ) then
  275.             bEnableUnicastRollover = FALSE
  276.         elseif( WMS_UNICAST_ROLLOVER_URL_OPTIONS_DEFAULT = dwRolloverOpts ) then
  277.             bEnableUnicastRollover = TRUE
  278.             bLocalPPRollover = TRUE
  279.         elseif( WMS_UNICAST_ROLLOVER_URL_OPTIONS_CUSTOM = dwRolloverOpts ) then
  280.             bEnableUnicastRollover = TRUE
  281.             bLocalPPRollover = FALSE
  282.         end if
  283.         
  284.         strUnicastRolloverPP = g_objPluginAdmin.UnicastRolloverURL
  285.         strLoggingURL = g_objPluginAdmin.LoggingURL        
  286.     end if
  287. end if
  288.  
  289. '///////////////////////////////////////////////////////////////
  290. sub BuildNICIPOptionList
  291.     Dim strCurrAddr
  292.     strCurrAddr = g_objPluginAdmin.LocalIPAddress
  293.     %><option value="0"><%= L_USEANYIPADDRESS_TEXT %></option>
  294.     <%
  295.     for i = 0 to g_objServer.AvailableIPAddresses.count - 1
  296.         strEachAddr = CStr( g_objServer.AvailableIPAddresses( i ) )
  297.     %><option value="<%= i + 1 %>" <% if( 0 = strComp( strCurrAddr, strEachAddr, vbTextCompare ) ) then %> selected <% end if %> ><%= strEachAddr & vbNewLine & vbNewLine %><%
  298.     next
  299. end sub
  300.  
  301.  
  302. WriteHTMLHeader( g_strDecodedServerName ) 
  303. %>
  304. <link rel="stylesheet" type="text/css" href="<%= Session( "cssName" ) %>">
  305. <% WritePluginJSUtils %>
  306. <script language="JavaScript">
  307. <!--
  308. /*@cc_on @*/
  309.  
  310. var g_bPubPointPathAlerted = false;
  311. var g_bLoggingURLAlerted = false;
  312.  
  313. //////////////////////////////////////////////////////////////////////////
  314. function ValidatePubPointPath()
  315. {
  316.     <% jsTRY %>
  317.         var szPath;
  318.         var szName;
  319.         var bCanBeEnabled;
  320.         var bValidPath;
  321.         
  322.         bCanBeEnabled = true;    
  323.         szPath = new String( document.forms.pluginForm.otherPPURL.value );
  324.         szName = new String( document.forms.pluginForm.otherPPURL.value );
  325.         if( ( 0 == szPath.length ) || ( 0 == szName.length ) || ( "#ff0000" == document.forms.pluginForm.otherPPURL.style.color ) )
  326.         {
  327.             bCanBeEnabled = false;
  328.         }
  329.  
  330.         bValidPath = false;
  331.         var szIllegalChars = /;|\^|\'|\<|\>|\`|\f|\n|\r/gi;
  332.         if( -1 == szPath.search( szIllegalChars ) )
  333.         {
  334.             bValidPath = true;
  335.         }
  336.  
  337.         if( false == bValidPath )
  338.         {
  339.             document.forms.pluginForm.otherPPURL.style.color = "#ff0000";
  340.             document.forms.pluginForm.ok.disabled = true;
  341.             window.status = "<%= Server.HTMLEncode( L_INVALIDCHARSINPATH_TEXT ) %>";
  342.             
  343.             if( false == g_bPubPointPathAlerted )
  344.             {
  345.                 g_bPubPointPathAlerted = true;
  346.                 window.alert( "<%= L_INVALIDCHARSINPATH_TEXT %>" );
  347.                 document.forms.pluginForm.otherPPURL.focus();
  348.             }
  349.         }
  350.         else
  351.         {
  352.             document.forms.pluginForm.otherPPURL.style.color = "#000000";
  353.             if( 0 < window.status.length )
  354.             {
  355.                 window.status = "";
  356.             }
  357.             return( true );
  358.         }
  359.         return( false );
  360.     <% jsCATCH %>
  361. }
  362.  
  363. //////////////////////////////////////////////////////////////////////////
  364. function ValidateLoggingURL()
  365. {
  366.     <% jsTRY %>
  367.         var szPath;
  368.         var szName;
  369.         var bCanBeEnabled;
  370.         var bValidPath;
  371.         
  372.         bCanBeEnabled = true;    
  373.         szPath = new String( document.forms.pluginForm.loggingURL.value );
  374.         szName = new String( document.forms.pluginForm.loggingURL.value );
  375.         if( ( 0 == szPath.length ) || ( 0 == szName.length ) || ( "#ff0000" == document.forms.pluginForm.loggingURL.style.color ) )
  376.         {
  377.             bCanBeEnabled = false;
  378.         }
  379.  
  380.         bValidPath = false;
  381.         var szIllegalChars = /;|\^|\'|\<|\>|\`|\f|\n|\r/gi;
  382.         if( -1 == szPath.search( szIllegalChars ) )
  383.         {
  384.             bValidPath = true;
  385.         }
  386.  
  387.         if( false == bValidPath )
  388.         {
  389.             document.forms.pluginForm.loggingURL.style.color = "#ff0000";
  390.             document.forms.pluginForm.ok.disabled = true;
  391.             window.status = "<%= Server.HTMLEncode( L_INVALIDCHARSINLOGURL_TEXT ) %>";
  392.             
  393.             if( false == g_bLoggingURLAlerted )
  394.             {
  395.                 g_bLoggingURLAlerted = true;
  396.                 window.alert( "<%= L_INVALIDCHARSINLOGURL_TEXT %>" );
  397.                 document.forms.pluginForm.loggingURL.focus();
  398.             }
  399.         }
  400.         else
  401.         {
  402.             if( 0 < window.status.length )
  403.             {
  404.                 window.status = "";
  405.             }
  406.             document.forms.pluginForm.loggingURL.style.color = "#000000";
  407.             return( true );
  408.         }
  409.         return( false );
  410.     <% jsCATCH %>
  411. }
  412.  
  413.  
  414. ///////////////////////////////////////////////////////////////////////////
  415. function IsNaturalNumber( szValue )
  416. {
  417.     <% jsTRY %>
  418.     var dwNumber;
  419.     var szNumber = szValue;
  420.     var szConvertedNumber;
  421.     
  422.     var regExpTest = new RegExp( /^\d+$/gi );
  423.     if( ! regExpTest.test( szValue ) )
  424.     {
  425.         return( false );
  426.     }
  427.     return( true );
  428.     
  429.     <% jsCATCH %>
  430.     return( false );
  431. }
  432.  
  433. ////////////////////////////////////////////////////////////
  434. function IsValidPortNumber( szValue )
  435. {
  436.     <% jsTRY %>
  437.     var dwNumber = new Number( szValue );
  438.     
  439.     if( dwNumber > 65535 )
  440.     {
  441.         return( false );
  442.     }
  443.         
  444.     if( dwNumber <= 0 )
  445.     {
  446.         return( false );
  447.     }
  448.     
  449.     return( true );
  450.     <% jsCATCH %>
  451. }
  452.  
  453. ////////////////////////////////////////////////////////////////  
  454. function CheckUserEntries()
  455. {
  456.     <% jsTRY %>
  457.     var bEntriesAreValid;
  458.     
  459.     do
  460.     {
  461.         bEntriesAreValid = ValidateIPAddrEntry();
  462.         if( ! bEntriesAreValid ) { window.status = "failed in ValidateIPAddrEntry"; break; }
  463.         bEntriesAreValid &= CheckPortEntry();
  464.         if( ! bEntriesAreValid ) { window.status = "failed in CheckPortEntry"; break; }
  465.         bEntriesAreValid &= CheckTTLEntry();
  466.         if( ! bEntriesAreValid ) { window.status = "failed in CheckTTLEntry"; break; }
  467.         bEntriesAreValid &= CheckUnicastRolloverOptions();
  468.         if( ! bEntriesAreValid ) { window.status = "failed in CheckUnicastRolloverOptions"; break; }
  469.         bEntriesAreValid &= ValidatePubPointPath();
  470.         if( ! bEntriesAreValid ) { window.status = "failed in ValidatePubPointPath"; break; }
  471.         bEntriesAreValid &= ValidateLoggingURL();
  472.         if( ! bEntriesAreValid ) { window.status = "failed in ValidateLoggingURL"; break; }
  473.     } while ( false );
  474.  
  475.     document.forms.pluginForm.ok.disabled = ! bEntriesAreValid;
  476.     <% jsCATCH %>
  477. }
  478.  
  479.  
  480. ////////////////////////////////////////////////////////////////  
  481. function CheckPortEntry()
  482. {
  483.     <% jsTRY %>
  484.     var dwIPPortVal;
  485.     var dwPortVal;
  486.  
  487.     dwPortVal = document.forms.pluginForm.port.value;
  488.     
  489.     if( ! IsNaturalNumber( document.forms.pluginForm.port.value ) || ! IsValidPortNumber( document.forms.pluginForm.port.value ) )
  490.     {
  491.         document.forms.pluginForm.port.style.color = "#ff0000";
  492.         return( false );
  493.     }
  494.     
  495.     document.forms.pluginForm.port.style.color = "#000000";    
  496.     return( true );        
  497.     <% jsCATCH %>
  498. }
  499.  
  500. ////////////////////////////////////////////////////////////////  
  501. function CheckTTLEntry()
  502. {
  503.     <% jsTRY %>
  504.     var szTTLVal;
  505.     var dwTTLVal;    
  506.     var szTTLValue = new String( document.forms.pluginForm.customTTL.value );
  507.  
  508.     if( 0 == document.forms.pluginForm.TTL.selectedIndex )  // custom TTL needs to be specified
  509.     {
  510.         if( 0 == szTTLValue.length )
  511.         {
  512.             document.forms.pluginForm.customTTL.disabled = false;
  513.             return( false );
  514.         }
  515.     
  516.         if( ! IsNaturalNumber( szTTLValue ) )
  517.         {
  518.             document.forms.pluginForm.customTTL.style.color = "#ff0000";
  519.             return( false );
  520.         }
  521.         
  522.         dwTTLVal = Number( szTTLValue );
  523.  
  524.         if( ( 0 >= dwTTLVal ) || ( dwTTLVal > 255 ) )
  525.         {
  526.             document.forms.pluginForm.customTTL.style.color = "#ff0000";
  527.             return( false );
  528.         }
  529.         
  530.         document.forms.pluginForm.customTTL.style.color = "#000000";
  531.     }
  532.     
  533.     return( true );
  534.     <% jsCATCH %>
  535. }
  536.  
  537. ////////////////////////////////////////////////////////////////  
  538. function CheckUnicastRolloverOptions( bSimulateClick )
  539. {
  540.     <% jsTRY %>
  541.     if( bSimulateClick )
  542.     {
  543.         document.forms.pluginForm.enableUnicastRollover.checked = ! document.forms.pluginForm.enableUnicastRollover.checked;
  544.     }
  545.  
  546.     if( document.forms.pluginForm.enableUnicastRollover.checked )
  547.     {
  548. <% if brMSIE = g_dwBrowserType then %>
  549.         document.all.localPPText.disabled = false;
  550.         document.all.otherPPText.disabled = false;
  551. <% end if %>
  552.         document.forms.pluginForm.otherPPURL.disabled = document.forms.pluginForm.RolloverToLocalPP[0].checked;
  553.         document.forms.pluginForm.RolloverToLocalPP[0].disabled = false;
  554.         document.forms.pluginForm.RolloverToLocalPP[1].disabled = false;
  555.     }
  556.     else
  557.     {
  558. <% if brMSIE = g_dwBrowserType then %>
  559.         document.all.localPPText.disabled = true;
  560.         document.all.otherPPText.disabled = true;
  561. <% end if %>
  562.         
  563.         document.forms.pluginForm.otherPPURL.disabled = true;
  564.         
  565.         document.forms.pluginForm.RolloverToLocalPP[0].disabled = true;
  566.         document.forms.pluginForm.RolloverToLocalPP[1].disabled = true;
  567.     }
  568.  
  569.     return( true );
  570.     <% jsCATCH %>
  571. }
  572.  
  573. ////////////////////////////////////////////////////////////////  
  574. function TogglePP( dwWhichRadioButton )
  575. {
  576.     <% jsTRY %>
  577.     if( document.forms.pluginForm.RolloverToLocalPP[0].disabled )
  578.     {
  579.         return;
  580.     }
  581.     
  582.     if( 0 == dwWhichRadioButton )
  583.     {
  584.         document.forms.pluginForm.RolloverToLocalPP[0].checked = true;
  585.         document.forms.pluginForm.RolloverToLocalPP[1].checked = false;
  586.         document.forms.pluginForm.otherPPURL.disabled = true;
  587.     }
  588.     else
  589.     {
  590.         document.forms.pluginForm.RolloverToLocalPP[0].checked = false;
  591.         document.forms.pluginForm.RolloverToLocalPP[1].checked = true;
  592.         document.forms.pluginForm.otherPPURL.disabled = false;
  593.     }
  594.     <% jsCATCH %>
  595. }
  596.  
  597. ////////////////////////////////////////////////////////////////  
  598. function TTLEntrySync( bCustomEntry )
  599. {
  600.     <% jsTRY %>
  601.     var dwNumOptions = 0;
  602.     var options;
  603.     var ttlSelect;
  604.     var szCustomTTL;
  605.     var bMatch = false;
  606.     
  607.     ttlSelect = document.forms.pluginForm.TTL;
  608.     szCustomTTL = document.forms.pluginForm.customTTL.value;
  609.     
  610.     options = ttlSelect.options;
  611.     dwNumOptions = options.length;
  612.  
  613.     if( ! bCustomEntry )
  614.     {
  615.         if( ttlSelect[ 0 ].selected )
  616.         {
  617.             document.forms.pluginForm.customTTL.disabled = false;
  618.             document.forms.pluginForm.customTTL.focus();
  619.         }
  620.         else
  621.         {
  622.             document.forms.pluginForm.customTTL.disabled = true;
  623.             document.forms.pluginForm.customTTL.value = "";
  624.         }
  625.     }
  626.     else
  627.     {
  628.         for( i = 1; i < dwNumOptions; i++ )
  629.         {
  630.             if( ttlSelect[ i ].value == szCustomTTL )
  631.             {
  632.                 ttlSelect[ i ].selected=true;
  633.                 bMatch = true;
  634.             }
  635.             else
  636.             {
  637.                 ttlSelect[ i ].selected=false;
  638.             }
  639.         }
  640.         if( ! bMatch )
  641.         {
  642.             ttlSelect[ 0 ].selected=true;
  643.         }
  644.     }
  645.     <% jsCATCH %>
  646. }
  647.  
  648. ////////////////////////////////////////////////////////////////  
  649. function ReloadForSpecifiedScope()
  650. {
  651.     <% jsTRY %>
  652.     var dwSelectedIndex;
  653.     var szNewQS;
  654.  
  655.     dwSelectedIndex = document.forms.pluginForm.ScopeList.selectedIndex;    
  656.     
  657.     <% if ( "" = GetFormStr( "ScopeList" ) ) then %>
  658.     if( 0 < dwSelectedIndex )
  659.     <% else %>
  660.     if( 0 <= dwSelectedIndex )
  661.     <% end if %>
  662.     {
  663.         document.location = "MulticastSink.asp?server=<%= g_strQueryStringServer %>&ppID=<%= g_strPubPointID %>&category=<%= g_strCategory %>&pluginIndex=<%= qs( "pluginIndex" ) %>&referrer=" + SafeEscape( "<%= GetPostOrQsVal( "referrer" ) %>" ) + "&SelectedProtocol=" + document.forms.pluginForm.SelectedProtocol.options[ dwSelectedIndex ].innerText + "&ProtocolIndex=" + ( dwSelectedIndex - 1 );
  664.     }
  665.     <% jsCATCH %>
  666. }
  667.  
  668. ////////////////////////////////////////////////////////////////  
  669. function ReloadForSpecifiedTTL()
  670. {
  671.     <% jsTRY %>
  672.     var dwSelectedIndex;
  673.     var szNewQS;
  674.  
  675.     dwSelectedIndex = document.forms.pluginForm.ttl.selectedIndex;
  676.     
  677.     <% if ( 0 = lTTLOption ) then %>
  678.     if( 0 < dwSelectedIndex )
  679.     <% else %>
  680.     if( 0 <= dwSelectedIndex )
  681.     <% end if %>
  682.     {
  683.         document.location = "MulticastSink.asp?server=" + "<%= g_strQueryStringServer %>" + "&ppID=" + "<%= g_strPubPointID %>" + "&category=<%= g_strCategory%>&pluginIndex=<%= qs( "pluginIndex" ) %>&referrer=" + SafeEscape( "<%= GetPostOrQsVal( "referrer" ) %>" ) + "&SelectedProtocol=" + document.forms.pluginForm.SelectedScope.options[ dwSelectedIndex ].innerText + "&ttl=" + ( dwSelectedIndex - 1 );
  684.     }
  685.     <% jsCATCH %>
  686. }
  687.  
  688. ////////////////////////////////////////////////////////////////  
  689. function ValidateIPAddrEntry()
  690. {
  691.     <% jsTRY %>
  692.     var szIPAddr;
  693.     var dwLenIPAddr;
  694.     var bCanBeEnabled;
  695.     var szLegalIPAddrChars;
  696.     var i;
  697.     
  698.     szLegalIPAddrChars = ".;";
  699.     bCanBeEnabled = true;
  700.     
  701.     szIPAddr = document.forms.pluginForm.IPAddress.value;
  702.     dwLenIPAddr = szIPAddr.length;
  703.     i = 0;
  704.     
  705.     if( 0 == dwLenIPAddr )
  706.     {
  707.         bCanBeEnabled = false;
  708.     }
  709.     else
  710.     {
  711.         //
  712.         // walk the legal char array and ensure that our chars fall somewhere within this range of valid entries
  713.         //
  714.         for( i="0" ; i < dwLenIPAddr ; i++ )
  715.         {
  716.             if( isNaN( szIPAddr.charAt( i ) ) )
  717.             {
  718.                 if( -1 == szLegalIPAddrChars.indexOf( szIPAddr.charAt( i ) ) )
  719.                 {
  720.                     bCanBeEnabled = false;
  721.                     break;
  722.                 }
  723.             }
  724.         }
  725.     }
  726.     
  727.     if( bCanBeEnabled )
  728.     {
  729.         if( 0 < window.status.length )
  730.         {
  731.             window.status = "";
  732.         }
  733.         document.forms.pluginForm.IPAddress.style.color = "#000000";
  734.     }
  735.     else
  736.     {
  737.         window.status ="<%= Server.HTMLEncode( L_INVALIDIPADDRESS_TEXT ) %>";
  738.         document.forms.pluginForm.IPAddress.style.color = "#ff0000";
  739.     }
  740.     
  741.     document.forms.pluginForm.ok.disabled = ! bCanBeEnabled;
  742.     return( bCanBeEnabled );
  743.     <% jsCATCH %>
  744. }
  745.  
  746. <% if bPubPointRunningPluginEnabled then %>
  747. function PreSubmitFcn()
  748. {
  749.     <% jsTRY %>
  750.     window.alert( "<%= RemoveDangerousCharacters( L_MCASTRUNNING_TEXT ) %>" );
  751.     return( true );
  752.     <% jsCATCH %>
  753. }
  754. <% end if %>
  755. -->
  756. </script>
  757. <link rel="stylesheet" type="text/css" href="<%= Session( "cssName" ) %>">
  758. </head>
  759. <body class="pluginBody" onLoad="JavaScript:CheckUserEntries();" <% if FALSE = bRunningOnWhistlerAdvServer then %> onLoad="JavaScript:Cancel();" <% end if %> oncontextmenu="JavaScript:event.cancelBubble=true;return false;">
  760. <% DrawPluginBanner %>
  761. <table width="90%" cellspacing="0" cellpadding="0" border="0">
  762. <tr>
  763.     <td valign=top>
  764.  
  765.         <% WriteStdPluginForm %>
  766.  
  767.         <table width=100% cellpadding="0" cellspacing="0" border="0">
  768.         <tr>
  769.             <td colspan=4>
  770.                 <div class="helptext">
  771.                     <br>
  772.                      
  773.                 </div>
  774.             </td>
  775.         </tr>
  776.         <tr>
  777.             <td colspan=10>
  778.                 <table class="propgroupbox" cellspacing="1" cellpadding="1" border="0" width="<%= Server.HTMLEncode( STDTABLEWIDTH ) %>">
  779.                 <tr><td><center>
  780.                 <table cellspacing="0" cellpadding="0" border="0" width="<%= Server.HTMLEncode( STDTABLEWIDTH ) %>">
  781.                     <tr>
  782.                         <td width=1>
  783.                              
  784.                         </td>
  785.                         <td colspan=3>
  786.                             <div class="helptext">
  787.                                 <% RenderWithErrorCheck Server.HTMLEncode( L_DESTMCASTIPPORT_TEXT ), "IPPort" %><br> 
  788.                             </div>
  789.                         </td>
  790.                     </tr>
  791.                     <tr>
  792.                         <td width=1>
  793.                              
  794.                         </td>
  795.                         <td colspan=3>
  796.                             <table width=100% cellpadding="0" cellspacing="0" border=0>
  797.                                 <tr>
  798.                                     <td width=10>
  799.                                          
  800.                                     </td>
  801.                                     <td colspan=2> 
  802.                                         <% RenderWithErrorCheck Server.HTMLEncode( L_SPECIFYMANUALLY_TEXT ), "IPAddr" %>
  803.                                     </td>
  804.                                 </tr>
  805.                                 <tr>
  806.                                     <td width=10>
  807.                                          
  808.                                     </td>
  809.                                     <td colspan=3>
  810.                                         <input 
  811.                                             type="text"
  812.                                             name="IPAddress"
  813.                                             tabIndex=1
  814.                                             class="input"
  815.                                             value="<% 
  816.                                                 if( 0 < Len( strNewIPAddr ) ) then 
  817.                                                     Response.Write( RemoveSpecifiedChars( strNewIPAddr, REGEXP_DANGEROUS_CHARS ) ) 
  818.                                                 else 
  819.                                                     Response.Write( RemoveSpecifiedChars( strIPAddr, REGEXP_DANGEROUS_CHARS ) ) 
  820.                                                 end if %>"  <%
  821.                                                 if( ( "IPAddr" = Session( "ErrorCulprit" ) ) and ( 0 <> Session( "PageReloadedToDisplayError" ) ) ) then %>
  822.                                             style="color:#ff0000"
  823.                                                 <%
  824.                                                 end if
  825.                                                 %>
  826.                                             onChange="JavaScript:CheckUserEntries();"
  827.                                             onPaste="JavaScript:CheckUserEntries();"
  828.                                             onKeyUp="JavaScript:CheckUserEntries();"
  829.                                             onKeyDown="JavaScript:CheckUserEntries();" >
  830.                                     </td>
  831.                                     <td>
  832.                                          
  833.                                     </td>
  834.                                     <td>
  835.                                          
  836.                                     </td>
  837.                                 </tr>
  838.                                 <tr>
  839.                                     <td> </td>
  840.                                 </tr>
  841.                                 <tr>
  842.                                     <td width=10>
  843.                                          
  844.                                     </td>
  845.                                     <td colspan=1>
  846.                                         <div ID="portText" class="defaultcursor" onClick="JavaScript:document.forms.pluginForm.port.focus();"><% RenderWithErrorCheck Server.HTMLEncode( L_PORTCOLON_TEXT ), "IPPort" %></div>
  847.                                     </td>
  848.                                     <td width=1>
  849.                                          
  850.                                     </td>
  851.                                     <td>
  852.                                          
  853.                                     <A ID="TTLText" class="defaultcursor" onClick="JavaScript:document.forms.pluginForm.TTL.focus();"><% RenderWithErrorCheck Server.HTMLEncode( L_MCASTTTL_TEXT ), "autoTTL" %> </A>
  854.                                     </td>
  855.                                     <td>
  856.                                     <A ID="CustomTTLText" class="defaultcursor" onClick="JavaScript:document.forms.pluginForm.customTTL.focus();"><% RenderWithErrorCheck Server.HTMLEncode( L_MCASTMANUALTTL_TEXT ), "customTTL" %> </A>
  857.                                     </td>
  858.                                 </tr>
  859.                                 <tr>
  860.                                     <td width=10>
  861.                                          
  862.                                     </td>
  863.                                     <td colspan=1>
  864.                                         <input 
  865.                                             type="text" 
  866.                                             name="port" 
  867.                                             onChange="JavaScript:CheckUserEntries();"
  868.                                             onPaste="JavaScript:CheckUserEntries();"
  869.                                             onKeyDown="JavaScript:CheckUserEntries();"
  870.                                             onKeyUp="JavaScript:CheckUserEntries();"
  871.                                             value="<%= Server.HTMLEncode( dwIPPort ) %>" 
  872.                                             size="<% if( brMSIE = g_dwBrowserType ) then %>4<% else %>6<% end if %>"
  873.                                             maxlength=6 
  874.                                             tabindex=5 
  875.                                             class="input" >
  876.                                     </td>
  877.                                     <td width=1>
  878.                                          
  879.                                     </td>
  880.                                     <td>
  881.                                          
  882.                                         <select
  883.                                             name="TTL" 
  884.                                             tabindex=6 
  885.                                             class="input" 
  886.                                             onChange="JavaScript:TTLEntrySync( false );CheckUserEntries();"
  887.                                             onPaste="JavaScript:TTLEntrySync( false );CheckUserEntries();">
  888.                                             <option value="0" <% if 0 = lTTLOption then Response.Write( "selected " ) end if%> > <%= Server.HTMLEncode( L_CHOOSETTL_TEXT ) %>
  889.                                             <option value="1" <% if 1 = lTTLOption then Response.Write( "selected" ) end if %> > <%= Server.HTMLEncode( L_MCASTTTL1_TEXT ) %>
  890.                                             <option value="32" <% if 32 = lTTLOption then Response.Write( "selected" ) end if %> > <%= Server.HTMLEncode( L_MCASTTTL2_TEXT ) %>
  891.                                             <option value="64" <% if 64 = lTTLOption then Response.Write( "selected" ) end if %> > <%= Server.HTMLEncode( L_MCASTTTL3_TEXT ) %>
  892.                                             <option value="128" <% if 128 = lTTLOption then Response.Write( "selected" ) end if %> > <%= Server.HTMLEncode( L_MCASTTTL4_TEXT ) %>
  893.                                             <option value="255" <% if 255 = lTTLOption then Response.Write( "selected" ) end if %> > <%= Server.HTMLEncode( L_MCASTTTL5_TEXT ) %>
  894.                                         </select>
  895.                                     </td>
  896.                                     <td>
  897.                                         <input 
  898.                                             type="text" 
  899.                                             name="customTTL" 
  900.                                             onClick="JavaScript:TTLEntrySync( true );" 
  901.                                             onChange="JavaScript:TTLEntrySync( true );CheckUserEntries();"
  902.                                             onPaste="JavaScript:TTLEntrySync( true );CheckUserEntries();"
  903.                                             onKeyDown="JavaScript:TTLEntrySync( true );CheckUserEntries();"
  904.                                             onKeyUp="JavaScript:TTLEntrySync( true );CheckUserEntries();"
  905.                                             value="<% if( ( 0 = lTTLOption ) and ( 0 <> lTTLValue ) ) then
  906.                                                 Response.Write( Server.HTMLEncode( lTTLValue ) )
  907.                                             end if %>" 
  908.                                             size="<% if( brMSIE = g_dwBrowserType ) then %>4<% else %>6<% end if %>"
  909.                                             maxlength=6 
  910.                                             tabindex=7 
  911.                                             class="input" >
  912.                                     </td>
  913.                                 </tr>
  914.                             </table>
  915.                         </td>
  916.                     </tr>
  917.                     <tr><td> </td></tr>
  918.                 </table>
  919.                 </center>
  920.                 </td></tr>
  921.                 </table>
  922.             </td>
  923.         </tr>
  924.         <tr>
  925.             <td> </td>
  926.         </tr>
  927.         <tr>
  928.             <td colspan=10>
  929.                 <table class="propgroupbox" cellspacing="1" cellpadding="1" border="0" width="<%= Server.HTMLEncode( STDTABLEWIDTH ) %>">
  930.                 <tr><td><center>
  931.                 <table cellspacing="0" cellpadding="0" border="0" width="<%= Server.HTMLEncode( STDTABLEWIDTH ) %>">
  932.                     <tr>
  933.                         <td colspan=3>
  934.                             <div class=defaultcursor>
  935.                             <input type="checkbox" name="enableUnicastRollover" tabindex=8 <%                                    
  936.                                 if bEnableUnicastRollover then
  937.                                     Response.Write( " checked " )
  938.                                 end if
  939.                             %> onClick="JavaScript:CheckUnicastRolloverOptions( false );"
  940.                             ><A onClick="JavaScript:CheckUnicastRolloverOptions( true );" class="defaultcursor"><% RenderWithErrorCheck Server.HTMLEncode( L_ENABLEUNICASTROLLOVER_TEXT ), "rollover" %></A>
  941.                             </div>
  942.                         </td>
  943.                         <td> </td>
  944.                     </tr>
  945.                     <tr>
  946.                         <td width=10>
  947.                              
  948.                         </td>
  949.                         <td colspan=4>
  950.                             <input type="radio" name="RolloverToLocalPP" onClick="JavaScript:TogglePP( 0 );" onChange="JavaScript:TogglePP( 0 );" value="localPP" tabindex=9 <%
  951.                             if( bLocalPPRollover ) then
  952.                                 %> checked <%
  953.                             end if
  954.                             
  955.                             if( FALSE = bEnableUnicastRollover ) then
  956.                                 %> disabled <%
  957.                             end if
  958.                             %> ><A ID="localPPText" <% if( FALSE = bEnableUnicastRollover ) then Response.Write( " disabled " ) end if %> class="defaultcursor" onClick="JavaScript:TogglePP( 0 );"> <% RenderWithErrorCheck Server.HTMLEncode( L_USELOCALPP_TEXT ), "localPP" %></A>
  959.                         </td>
  960.                     </tr>
  961.                     <tr>
  962.                         <td width=10>
  963.                              
  964.                         </td>
  965.                         <td colspan=4>
  966.                             <input type="radio" name="RolloverToLocalPP" value="otherPP" onClick="JavaScript:TogglePP( 1 );" onChange="JavaScript:TogglePP( 1 );" tabindex=10 <%
  967.                             if( FALSE = bLocalPPRollover ) then
  968.                                 %> checked <%
  969.                             end if
  970.                             
  971.                             if( FALSE = bEnableUnicastRollover ) then
  972.                                 %> disabled <%
  973.                             end if
  974.                             %> ><A ID="otherPPText" <% if( FALSE = bEnableUnicastRollover ) then Response.Write( " disabled " ) end if %> class="defaultcursor" onClick="JavaScript:TogglePP( 1 );"> <% RenderWithErrorCheck Server.HTMLEncode( L_USEOTHERPP_TEXT ), "otherPP" %></A>
  975.                         </td>
  976.                     </tr>
  977.                     <tr>
  978.                         <td width=10>
  979.                              
  980.                         </td>
  981.                         <td>
  982.                              
  983.                         </td>
  984.                         <td>
  985.                                 <input 
  986.                                                         type="text" 
  987.                                                         name="otherPPURL" 
  988.                                                         onKeyDown="JavaScript:CheckUserEntries();"
  989.                                                         onKeyUp="JavaScript:CheckUserEntries();"
  990.                                                         onChange="JavaScript:CheckUserEntries();TogglePP( 1 );" 
  991.                                                         onPaste="JavaScript:CheckUserEntries();TogglePP( 1 );" 
  992.                                                         value="<%= RemoveSpecifiedChars( strUnicastRolloverPP, REGEXP_ILLEGAL_PATH_CHARS ) %>" 
  993.                                                         size="<% if( brMSIE = g_dwBrowserType ) then %>60<% else %>40<% end if %>"
  994.                                                         tabIndex=11 <% if( FALSE = bEnableUnicastRollover ) then Response.Write( " disabled " ) end if %> >
  995.                         </td>
  996.                         <td>
  997.                              
  998.                         </td>
  999.                     </tr>
  1000.                     <tr>
  1001.                         <td>
  1002.                              
  1003.                         </td>
  1004.                     </tr>
  1005.                 </table>
  1006.                 </center></td></tr>
  1007.                 </table>
  1008.             </td>
  1009.         </tr>
  1010.         <tr>
  1011.             <td colspan=4> <br>
  1012.             </td>
  1013.         </tr>
  1014.         </table>
  1015.         <table class="propgroupbox" cellspacing="1" cellpadding="1" border="0" width="<%= Server.HTMLEncode( STDTABLEWIDTH ) %>">
  1016.         <tr><td><center>
  1017.         <table cellspacing="0" cellpadding="0" border="0" width="<%= Server.HTMLEncode( STDTABLEWIDTH ) %>">
  1018.             <tr>
  1019.                 <td colspan=4>
  1020.                     <div class="defaultcursor"><%= Server.HTMLEncode( L_CHOOSENIC_TEXT ) %></div>
  1021.                 </td>
  1022.             </tr>
  1023.             <tr>
  1024.                 <td colspan=1>
  1025.                      
  1026.                 </td>
  1027.                 <td>
  1028.                 <select ID="NICIP" name="NICIP" tabindex=12 class="input">
  1029.                     <% BuildNICIPOptionList %>
  1030.                 </select>
  1031.                 </td>
  1032.             </tr>
  1033.             <tr>
  1034.                 <td>
  1035.                      <br>
  1036.                 </td>
  1037.             </tr>
  1038.             <tr>
  1039.                 <td colspan=4>
  1040.                     <div class="defaultcursor"><% RenderWithErrorCheck Server.HTMLEncode( L_LOGGINGURLCOLON_TEXT ), "loggingURL" %></div>
  1041.                 </td>
  1042.             </tr>
  1043.             <tr>
  1044.                 <td colspan=1>
  1045.                      
  1046.                 </td>
  1047.                 <td>
  1048.                     <input 
  1049.                         type="text" 
  1050.                         name="loggingURL" 
  1051.                         size="<% if( brMSIE = g_dwBrowserType ) then %>80<% else %>40<% end if %>" 
  1052.                         tabIndex=13 
  1053.                         class="input" 
  1054.                         onKeyDown="JavaScript:CheckUserEntries();"
  1055.                         onKeyUp="JavaScript:CheckUserEntries();"
  1056.                         onChange="JavaScript:CheckUserEntries();"
  1057.                         onPaste="JavaScript:CheckUserEntries();"
  1058.                         value="<%= RemoveSpecifiedChars( strLoggingURL, REGEXP_ILLEGAL_PATH_CHARS ) %>">
  1059.                 </td>
  1060.             </tr>
  1061.         </table>
  1062.         </td>
  1063.         </tr>
  1064.         </table>
  1065.     </td>
  1066. </tr>
  1067. <tr>
  1068.     <td>
  1069.          <br> 
  1070.     </td>
  1071. </tr>
  1072. <tr>
  1073.     <td>
  1074.         <tr>
  1075.             <td valign=bottom>
  1076.                 <input type="submit" id="ok" align="baseline" tabIndex=14 value="<%= Server.HTMLEncode( L_OKAYBUTTON_TEXT ) %>" <% if bPubPointRunningPluginEnabled then %>onClick="JavaScript:PreSubmitFcn();"<% end if %>> 
  1077.                 <input type="button" align="baseline" name="cancel" onclick="Cancel()" tabIndex=15 value="<%= Server.HTMLEncode( L_CANCELBUTTONSPACED_TEXT ) %>"> 
  1078.                 <input type="button" align="baseline" name="help" id="help" onclick="JavaScript:DoPluginHelp( '<%= H_MULTICASTSINKHELPTOPIC %>' )" value="<%= Server.HTMLEncode( L_HELPBUTTONSPACED_TEXT ) %>" tabindex=16>
  1079.             </td>
  1080.         </tr>
  1081.     </td>
  1082. </tr>
  1083. </form>
  1084. </table>
  1085. <%
  1086. if( 0 = StrComp( "-2147013895", Session( "ErrorNumber" ), vbTextCompare ) ) then
  1087.     %><script language="javascript">alert( "<%= L_MCASTADDRINVALID_TEXT %>" );window.history.back();</script> <%
  1088. elseif( 0 = StrComp( "-1072889800", Session( "ErrorNumber" ), vbTextCompare ) ) then
  1089.     %><script language="javascript">alert( "<%= L_MCASTADDRRESERVED_TEXT %>" );window.history.back();</script> <%
  1090. else
  1091.     AlertUserWithPopupErrorDialog
  1092. end if
  1093. OnErrorGoBack 
  1094. DrawStdFooter
  1095. %>
  1096. <script language="JavaScript">
  1097.     // Prime the unicast rollover fields
  1098.     setTimeout( "CheckUnicastRolloverOptions( false );", 250, "JavaScript" );
  1099.  
  1100. </script>
  1101. </body>
  1102. </html>
  1103. <%
  1104. LatchCurrentPage "plugins/MulticastSink.asp", qs
  1105. EndErrorHandling "MulticastSink.asp" 
  1106.  
  1107. on error resume next
  1108. PluginsASPCleanup
  1109. %>
  1110.